"""
Banking77 Intent Mapping
Maps label numbers (0-76) to intent names
"""

INTENT_LABELS = [
    "activate_my_card",
    "age_limit",
    "apple_pay_or_google_pay",
    "atm_support",
    "automatic_top_up",
    "balance_not_updated_after_bank_transfer",
    "balance_not_updated_after_cheque_or_cash_deposit",
    "beneficiary_not_allowed",
    "cancel_transfer",
    "card_about_to_expire",
    "card_acceptance",
    "card_arrival",
    "card_delivery_estimate",
    "card_linking",
    "card_not_working",
    "card_payment_fee_charged",
    "card_payment_not_recognised",
    "card_payment_wrong_exchange_rate",
    "card_swallowed",
    "cash_withdrawal_charge",
    "cash_withdrawal_not_recognised",
    "change_pin",
    "compromised_card",
    "contactless_not_working",
    "country_support",
    "declined_card_payment",
    "declined_cash_withdrawal",
    "declined_transfer",
    "direct_debit_payment_not_recognised",
    "disposable_card_limits",
    "edit_personal_details",
    "exchange_charge",
    "exchange_rate",
    "exchange_via_app",
    "extra_charge_on_statement",
    "failed_transfer",
    "fiat_currency_support",
    "get_disposable_virtual_card",
    "get_physical_card",
    "getting_spare_card",
    "getting_virtual_card",
    "lost_or_stolen_card",
    "lost_or_stolen_phone",
    "order_physical_card",
    "passcode_forgotten",
    "pending_card_payment",
    "pending_cash_withdrawal",
    "pending_top_up",
    "pending_transfer",
    "pin_blocked",
    "receiving_money",
    "Refund_not_showing_up",
    "request_refund",
    "reverted_card_payment?",
    "supported_cards_and_currencies",
    "terminate_account",
    "top_up_by_bank_transfer_charge",
    "top_up_by_card_charge",
    "top_up_by_cash_or_cheque",
    "top_up_failed",
    "top_up_limits",
    "top_up_reverted",
    "topping_up_by_card",
    "transaction_charged_twice",
    "transfer_fee_charged",
    "transfer_into_account",
    "transfer_not_received_by_recipient",
    "transfer_timing",
    "unable_to_verify_identity",
    "verify_my_identity",
    "verify_source_of_funds",
    "verify_top_up",
    "virtual_card_not_working",
    "visa_or_mastercard",
    "why_verify_identity",
    "wrong_amount_of_cash_received",
    "wrong_exchange_rate_for_cash_withdrawal"
]


def get_intent(label_number):
    """
    Get intent name from label number.
    
    Args:
        label_number (int): Label from 0 to 76
        
    Returns:
        str: Intent name
        
    Example:
        >>> get_intent(0)
        'activate_my_card'
        >>> get_intent(25)
        'declined_card_payment'
    """
    if 0 <= label_number <= 76:
        return INTENT_LABELS[label_number]
    else:
        raise ValueError(f"Label must be between 0 and 76, got {label_number}")


def get_label(intent_name):
    """
    Get label number from intent name.
    
    Args:
        intent_name (str): Intent name
        
    Returns:
        int: Label number (0-76)
        
    Example:
        >>> get_label('activate_my_card')
        0
        >>> get_label('declined_card_payment')
        25
    """
    try:
        return INTENT_LABELS.index(intent_name)
    except ValueError:
        raise ValueError(f"Intent '{intent_name}' not found in labels")


# Quick access
def show_all_intents():
    """Display all 77 intents with their labels"""
    for i, intent in enumerate(INTENT_LABELS):
        print(f"{i}\t{intent}")


if __name__ == "__main__":
    # Test the functions
    print("Testing get_intent:")
    print(f"Label 0: {get_intent(0)}")
    print(f"Label 25: {get_intent(25)}")
    print(f"Label 76: {get_intent(76)}")
    
    print("\nTesting get_label:")
    print(f"'activate_my_card': {get_label('activate_my_card')}")
    print(f"'declined_card_payment': {get_label('declined_card_payment')}")

